import Vue from 'vue'
import VueRouter from 'vue-router'
// 导入组件 不写具体的文件名，默认会找 index
import company from '../views/company'
import question from '../views/question'
import find from '../views/find'
import my from '../views/my'
// 登录页
import login from '../views/login'
// 用户信息页
import userInfo from '../views/userInfo'
// 编辑页
import editInfo from '../views/editInfo'
// 列表页
import shareList from '../views/shareList'
// 搜索页
import shareSearch from '../views/shareSearch'
// 详情页
import shareDetail from '../views/shareDetail'
// 导入仓库
import store from '../store'
// 导入提示框
import { Toast } from 'vant'
// 导入token工具函数
import { getToken, removeToken } from '../utils/local'
// 导入api
import { getUserInfo } from '../api/user'

Vue.use(VueRouter)

const routes = [
  {
    path: '/company',
    component: company,
    meta: {
      // 显示tabbar
      showTabbar: true
    }
  },
  {
    path: '/question',
    component: question,
    meta: {
      // 显示tabbar
      showTabbar: true
    }
  },
  {
    path: '/find',
    component: find,
    meta: {
      // 显示tabbar
      showTabbar: true
    }
  },
  {
    path: '/my',
    component: my,
    meta: {
      // 显示tabbar
      showTabbar: true,
      // 标记需要登录
      needLogin: true
    }
  },
  {
    path: '/userInfo',
    component: userInfo,
    meta: {
      // 标记需要登录
      needLogin: true
    }
  },
  {
    path: '/editInfo',
    component: editInfo,
    meta: {
      // 标记需要登录
      needLogin: true
    }
  },
  {
    path: '/login',
    component: login
  },
  {
    path: '/shareList',
    component: shareList
  },
  {
    path: '/shareSearch',
    component: shareSearch
  },
  {
    // 动态路由匹配
    path: '/shareDetail/:id',
    component: shareDetail
  }
]
const router = new VueRouter({
  routes
})

// 注册导航守卫
router.beforeEach((to, from, next) => {
  // console.log('to:', to)
  // console.log('from:', from)
  // 是否需要登录
  if (to.meta.needLogin) {
    // 判断 vuex中的登录状态
    if (store.state.isLogin) {
      // 登陆了 继续
      next()
    } else {
      // 没登录 有可能有token
      if (getToken()) {
        // token存在 但是没有信息 获取一次
        getUserInfo()
          .then(res => {
            // 处理用户头像
            res.data.avatar = process.env.VUE_APP_URL + res.data.avatar
            // vuex中保存用户信息
            store.commit('SETUSERINFO', res.data)
            // vuex中保存登录状态
            store.commit('SETISLOGIN', true)
            // 放走
            next()
          })
          .catch(err => {
            console.log(err)
            // 删除token
            removeToken()
            // token有误 去 登录页
            Toast.fail('请先登录')
            next(`/login?redirect=${to.fullPath}`)
          })
      } else {
        // 既没有用户信息 也没有 token
        Toast.fail('请先登录')
        next(`/login?redirect=${to.fullPath}`)
      }
    }
  } else {
    // 不需要登录放走
    next()
  }
})
// 全局后置守卫 路由守卫全局执行的最后一个
router.afterEach((to, from) => {
  // 滚到顶部
  window.scrollTo(0, 0)
})

export default router
